import { _decorator, Component, Node, Input, input, EventKeyboard, KeyCode, director } from 'cc';
import { Ground } from './Ground';
import { Results } from './Results';
const { ccclass, property } = _decorator;

@ccclass('Game')
export class Game extends Component {
    // 将ground属性指定为Component类型，并且具体类型为Ground类（Ground.ts脚本）。
    // 将Ground节点拖拽到该属性上，就可以直接获取Ground节点下挂载的Ground.ts脚本的实例
    @property({ type: Component, tooltip: '获取地面节点下的Ground脚本' })
    public groundScript: Ground;

    @property({
        type: Results,
        tooltip: '获取挂载Results脚本的节点'
    })
    public resultsScript: Results;

    @property()
    public pipeSpeed: number = 200; // 改变水管的速度
    @property()
    public speed: number = 200; // 改变地块的速度

    onLoad(): void {
        // 初始化监听
        this.initListener();

        console.log(this.resultsScript);

        // 重置得分
        this.resultsScript.resetScore();

        // 暂停游戏
        director.pause();
    }

    start() {}

    update(deltaTime: number) {}

    // 初始化监听事件
    initListener() {
        input.on(Input.EventType.KEY_DOWN, this.handleKeyDown, this);
    }

    // 键盘按下事件 - A 键结束游戏 P键 增加一分 Q键重置游戏
    handleKeyDown(event: EventKeyboard) {
        switch (event.keyCode) {
            case KeyCode.KEY_A:
                this.gameOver();
                break;
            case KeyCode.KEY_P:
                this.resultsScript.addScore();
                break;
            case KeyCode.KEY_Q:
                this.resetGame();
                break;
        }
    }

    startGame() {
        // 隐藏结果
        this.resultsScript.hideResult();

        // 游戏继续
        director.resume();
    }

    // 游戏结束
    gameOver() {
        // 显示结果
        this.resultsScript.showResult();
        // 暂停游戏
        director.pause();
    }
    // 重置游戏
    resetGame() {
        // 得分重置
        this.resultsScript.resetScore();
        // 重写开始游戏
        this.startGame();
    }
}
